package utils

import (
	"os"
	"syscall"
)

/** 判断一个位置是否挂载了 */
func IsMounted(dir string) bool {
	return Command("mountpoint", dir) == nil
}

/** 文件是否存在 */
func FileExists(filename string) bool {
	_, err := os.Stat(filename)
	return !os.IsNotExist(err)
}

/** 文件大小 */
func FileSize(filename string) int64 {
	file, err := os.Stat(filename)
	if file == nil || err != nil {
		return 0
	}
	return file.Size()
}

/** 获取某个目录空闲大小 */
func DirFreeSize(dir string) uint64 {
	var stat syscall.Statfs_t
	syscall.Statfs(dir, &stat)
	// size := fmt.Sprintf("%.f", float64(stat.Bavail * uint64(stat.Bsize)) / 1024 / 1024 / 1024) G
	size := stat.Bavail * uint64(stat.Bsize) // k
	return size
}

/** 获取某个目录的总大小 */
func DirTotalSize(dir string) uint64 {
	var stat syscall.Statfs_t
	syscall.Statfs(dir, &stat)
	// size := fmt.Sprintf("%.f", float64(stat.Bavail * uint64(stat.Bsize)) / 1024 / 1024 / 1024) G
	size := stat.Blocks * uint64(stat.Bsize) // k
	return size
}

/** 获取某个目录的总大小 */
func DirUsedSize(dir string) uint64 {
	var stat syscall.Statfs_t
	syscall.Statfs(dir, &stat)
	// size := fmt.Sprintf("%.f", float64(stat.Bavail * uint64(stat.Bsize)) / 1024 / 1024 / 1024) G
	size := (stat.Blocks - stat.Bavail) * uint64(stat.Bsize) // k
	return size
}
